package MyString;

import java.util.HashMap;
import java.util.List;

/**
 * 1638. 统计只差一个字符的子串数目
 *
 * 给你两个字符串 s 和 t ，请你找出 s 中的非空子串的数目，这些子串满足替换 一个不同字符 以后，是 t 串的子串。换言之，请你找到 s 和 t 串中 恰好 只有一个字符不同的子字符串对的数目。
 *
 * 比方说， "computer" 和 "computation" 加粗部分只有一个字符不同： 'e'/'a' ，所以这一对子字符串会给答案加 1 。
 *
 * 请你返回满足上述条件的不同子字符串对数目。
 *
 * 一个 子字符串 是一个字符串中连续的字符。
 *
 *
 *
 * 示例 1：
 *
 * 输入：s = "aba", t = "baba"
 * 输出：6
 * 解释：以下为只相差 1 个字符的 s 和 t 串的子字符串对：
 * ("aba", "baba")
 * ("aba", "baba")
 * ("aba", "baba")
 * ("aba", "baba")
 * ("aba", "baba")
 * ("aba", "baba")
 * 加粗部分分别表示 s 和 t 串选出来的子字符串。
 *
 * 示例 2：
 *
 * 输入：s = "ab", t = "bb"
 * 输出：3
 * 解释：以下为只相差 1 个字符的 s 和 t 串的子字符串对：
 * ("ab", "bb")
 * ("ab", "bb")
 * ("ab", "bb")
 * 加粗部分分别表示 s 和 t 串选出来的子字符串。
 *
 * 示例 3：
 *
 * 输入：s = "a", t = "a"
 * 输出：0
 *
 * 示例 4：
 *
 * 输入：s = "abe", t = "bbc"
 * 输出：10
 *
 *https://leetcode-cn.com/problems/count-substrings-that-differ-by-one-character/solution/shen-zhi-4zhong-xun-huan-bu-jin-tong-guo-sset/
 * 最佳题解 中心扩散法
 * left 中心不同的一点 right ===> left + 1 + right + left * right = (left+1) * (right+1)
 */

public class Leetcode1683_no {

    public static int countSubstrings(String s, String t) {
        int ls = s.length(), lt = t.length();

        int res = 0;
        for(int i=0; i<ls; i++){
            for(int j=0; j<lt; j++){
                int diff = 0;
                for(int k=0; i+k<ls && j+k<lt; k++){
                    if(s.charAt(i+k)!=t.charAt(j+k)){
                        diff++;
                    }
                    if(diff == 1){
                        res++;
                    }
                    if(diff > 1){
                        break;
                    }
                }
            }
        }
        return res;
    }

    public static void main(String[] args) {
        String s = "aba";
        String t = "baba";
        int ans = countSubstrings(s, t);
        System.out.println("ans = " + ans);


    }

}
